WRF编译
近期需要用到气象预测软件WRF,这里记录一下下WRF软件的过程。目前由于电脑是Intel,所以后续均采用了Intel Oneapi带的编译器
这一部分主要参考了下面的链接:
Full WRF and WPS Installation Example (Intel) | WRF & MPAS-A Support Forum
依赖库编译
所有的依赖库均选择在一个指定的目录$HOME/WRF-OF/DEPS/dir,指定`export DIR=$HOME/WRF-OF/DEPS/dir,方便后续指定prefix。
Update 20241205: Arch Linux下还需要sudo pacman -Sy time
加载编译器和指定环境变量:
#!/bin/bash
module load mpi/latest compiler/latest
export DIR=$HOME/WRF-OF/DEPS/dir
export PATH=.:$DIR/bin:${PATH}
export LD_LIBRARY_PATH=$DIR/lib:$LD_LIBRARY_PATH
export JASPERLIB=$DIR/lib
export JASPERINC=$DIR/include
export NETCDF=$DIR
export CC=icx
export CXX=icpx
export F77=ifx
export FC=ifx
export F90=ifx
export CPP='icx -E'
export CXXCPP='icpx -E'
export CFLAGS='-O3 -xHost'
# add -Wstrict-prototypes for jasper 1.900.29
# export CFLAGS='-O3 -xHost -Wstrict-prototypes'
export CXXFLAGS='-O3 -xHost'
export FFLAGS='-O3 -xHost'
export LDFLAGS="-L$DIR/lib"
export CPPFLAGS="-I$DIR/include"
ZLIB
./configure --prefix=$DIR
make
make install
HDF5
HDF5这里选择编译并行版本的
./configure --enable-fortran --enable-cxx --enable-parallel --prefix=$DIR --with-zlib=$DIR --enable-build-mode=production
make -j 6
make install
NETCDF
新版本的NETCDF需要先编译C版本的,才能编译Fortran版本的
NETCDF-C编译
./configure --prefix=${DIR} --disable-dap --enable-netcdf-4
make -j 6
make install
NETCDF-FORTRAN编译
/configure --prefix=$DIR --disable-dap
make -j 6
make install
LIBPNG编译
./configure --prefix=${DIR}
make
make install
JASPER编译
由于WPS的支持问题,请选择jasper-2.0.14
cd build
cmake -DCMAKE_INSTALL_PREFIX=$DIR ..
make
make install
Update 2024.12.11: 采用jasper-1.900.29
export CFLAGS="$CFLAGS -Wstrict-prototypes"
./configure --prefix=$DIR
make -j
make install
CDO编译
./configure --prefix=${DIR} --with-netcdf=$DIR
make -j 6
make install
WRF编译
对于使用Arch Linux和Intel 最新的DPC++h编译器,还需要手动更改一部分配置configure.wrf或者configure.wps
- 将DM_FC和DM_CC分别从mpif90和mpicc改成mpiifx和mpiicx
- 将cpp的路径/lib/cpp改为直接使用cpp调用
WRF本体编译
export NETCDF=$DIR
./clean -a # 清除上次的编译文件
./configure
./compile -j 6 em_real
WPS软件编译
export NETCDF=$DIR
# 手动指定jasper库位置,不然会找不到定义
export JASPERLIB=$DIR/lib
export JASPERINC=$DIR/include
./clean -a
./configure
./compile
ARWPost编译
这个由于软件源码古早,编译的时候需要对configure.arwp配置文件进行修改:
export LDFLAGS="`nf-config --flibs`"
export FFLAGS="$FFLAGS -fallow-argument-mismatch"
测试案例的运行
目前是尝试分离合作方提供的测试案例(合作方提供的是WRF程序代码目录和案例配置文件混在一起的目录),这里简单梳理一下WRF运行一个案例,需要那些流程,文件,以及他们背后的含义。这里主要参考了官网教程
graph TD
subgraph "External data"
A(Static Geographical Data)
C(Gridded Meteorological Data)
end
subgraph "WRF Preprocessing System"
A --> B(geogrid)
C --> D(ungrib)
B --> E(metgrid)
D --> E
end
subgraph " WRF Model "
E --> F(real)
F --> G(wrf)
end数据预处理
这一部分主要是使用WPS软件,使用的程序是:
- geogrid.exe:由外部数据源获取的静态地理数据生成地面数据
- ungrib.exe:解压来自外部来源的GRIB气象数据,并将其打包成中间文件格式。
- metgrid.exe:将气象数据水平插值到您的模型域中。metgrid.exe 的输出作为 WRF(通过 real.exe 程序)输入。
geogrid.exe
- 下载地面数据
- 编辑
namelist.wps文件中的&share和&geogrid - 运行
geogrid.exe,生成每个domain对应的geo_em.dxx.nc格式文件
ungrib.exe
- 下载气象数据
- 链接正确的Vtable
# link the correct Vtable
ln -sf /path/to/WPS/ungrib/Variable_Tables/Vtable.GFS Vtable
- 链接处理脚本
ln -sf /path/to/WPS/link_grib.csh .
./link_grib.csh path_to_data
- 修改
namelist.wps中的&share和&ungrib部分,尤其注意以下的参数:start_date ; end_date ; interval_seconds ; prefix - 运行
ungrib.exe,生成相应的中间格式文件,格式为:_FILE:YYYY-MM-DD_hh_
metgrid.exe
- 编辑
namelist.wps文件中的&share和&metgrid部分 - 运行
metgrid.exe生成模型文件met_em.d0X_.YYYY-MM-DD_hh_:00:00.nc,需要注意**metgrid.exe需要来自geogrid.exe的geo_em.d_xx_.nc和来自ungrib.exe的FILE:YYYY-MM-DD_hh**
至此,数据的预处理部分已经完成。下面将开始运行WRF程序进行计算。
WRF
运行WRF模型需要2步,首先是通过real.exe将上面的预处理文件变成wrf的输入文件。